"use strict";

const { CameraCompare } = require("../models");

/**
 * 插入单条相机比较数据
 * @param {Object} data - 相机比较数据对象
 * @returns {Promise<Object>} 插入结果
 */
async function insertCameraCompareData(data) {
  try {
    // 验证必需字段
    if (!data.sn) {
      throw new Error("SN 字段是必需的");
    }

    // 插入数据
    const result = await CameraCompare.create(data);
    return {
      success: true,
      data: result.toJSON(),
      message: "数据插入成功",
    };
  } catch (error) {
    return {
      success: false,
      data: null,
      message: error.message,
    };
  }
}

/**
 * 批量插入相机比较数据
 * @param {Array<Object>} dataList - 相机比较数据对象数组
 * @returns {Promise<Object>} 插入结果
 */
async function insertBulkCameraCompareData(dataList) {
  try {
    // 验证输入
    if (!Array.isArray(dataList) || dataList.length === 0) {
      throw new Error("数据列表必须是非空数组");
    }

    // 验证每条数据的必需字段
    for (let i = 0; i < dataList.length; i++) {
      if (!dataList[i].sn) {
        throw new Error(`第${i + 1}条数据缺少必需的SN字段`);
      }
    }

    // 批量插入数据
    const results = await CameraCompare.bulkCreate(dataList);
    return {
      success: true,
      data: results.map((item) => item.toJSON()),
      message: `成功插入 ${results.length} 条数据`,
    };
  } catch (error) {
    return {
      success: false,
      data: null,
      message: error.message,
    };
  }
}

/**
 * 根据SN查找相机比较数据
 * @param {string} sn - SN码
 * @returns {Promise<Object>} 查找结果
 */
async function findCameraCompareBySn(sn) {
  try {
    const results = await CameraCompare.findAll({
      where: {
        sn: sn,
      },
    });
    return {
      success: true,
      data: results.map((item) => item.toJSON()),
      message: `找到 ${results.length} 条相关数据`,
    };
  } catch (error) {
    return {
      success: false,
      data: null,
      message: error.message,
    };
  }
}

module.exports = {
  insertCameraCompareData,
  insertBulkCameraCompareData,
  findCameraCompareBySn,
};
